/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package persistencia;

import java.util.ArrayList;
import java.util.Iterator;
import negocio.Jogador;

/**
 *
 * @author jessica.rodrigues
 */
public final class JogadorDAO extends DAO {
	private final int INDEX_NOME = 1;
	private final int INDEX_LOGIN = 2;
	private final int INDEX_PASSWORD = 3;
	private final int INDEX_SCORE = 4;
	private final int INDEX_PERMISSAO = 5;
	private ArrayList<Jogador> list;

	public JogadorDAO() {
		super("C:\\Felipe\\TADS\\POO\\damas-ifrs\\src\\data\\jogador.csv");
	}

	private Jogador dataToJogador(String[] data) {
		Jogador jogador = new Jogador();
		jogador.setCodigo(Integer.parseInt(data[INDEX_KEY]));
		jogador.setNome(data[INDEX_NOME]);
		jogador.setLogin(data[INDEX_LOGIN]);
		jogador.setPassword(data[INDEX_PASSWORD]);
		jogador.setScore(Integer.parseInt(data[INDEX_SCORE]));
		String permissaoLista[] = data[INDEX_PERMISSAO].split("\\|");
		for (int i = 0; i < permissaoLista.length; i++) {
			jogador.permissao.addPermissao(Integer.parseInt(permissaoLista[i]));
		}

		return jogador;
	}

	public ArrayList<Jogador> getList() {
		ArrayList<Jogador> list = new ArrayList<Jogador>();

		for(String[] data : this.getListString()) {
			list.add(this.dataToJogador(data));
		}

		return list;
	}

	public Jogador getByLogin(String login) {
		for(String[] data : this.getListString()) {
			if (data[INDEX_LOGIN].equals(login)) {
				return this.dataToJogador(data);
			}
		}
		
		return null;
	}
	
	public void removeByLogin(String login) {
		this.remove(login, INDEX_LOGIN);
	}
	
	public void valid(Jogador jogador) throws Exception {
		Jogador jogadorExistente = this.getByLogin(jogador.getLogin());
		if(jogadorExistente != null && jogadorExistente.getCodigo() != jogador.getCodigo()) {
			throw new Exception("O login escolhido já está sendo utilizado.");
		}
	}

	public void store(Jogador jogador) throws Exception {
		this.valid(jogador);
		
		String data[] = new String[6];

		int codigo = jogador.getCodigo();
		data[INDEX_KEY] = Integer.toString(codigo == 0 ? this.getNextCodigo() : codigo);
		data[INDEX_NOME] = jogador.getNome();
		data[INDEX_LOGIN] = jogador.getLogin();
		data[INDEX_PASSWORD] = jogador.getPassword();
		data[INDEX_SCORE] = Integer.toString(jogador.getScore());
		StringBuilder builder = new StringBuilder();
		Integer[] permissaoLista = jogador.permissao.toArray();
		builder.append(permissaoLista[0]);
		for(int i = 1; i < permissaoLista.length; i++) {
			builder.append('|');
			builder.append(permissaoLista[i]);
		}
		data[INDEX_PERMISSAO] = builder.toString();

		this.store(data);
	}
	
	@Override
	protected int getNextCodigo() {
		ArrayList<String[]> listString = this.getListString();
		System.out.println();
		return Integer.parseInt(listString.get(listString.size() - 1)[INDEX_KEY]) + 1;
	}
}